package com.alipay.service;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.httpclient.HttpException;

import com.alipay.common.Constant;
import com.alipay.common.Message;
import com.alipay.common.Message.PayStatus;
import com.alipay.common.PayParam;
import com.alipay.common.RefundParam;
import com.alipay.config.AlipayConfig;
import com.alipay.util.AlipaySubmit;
import com.alipay.util.XMLUtil;


public class AlipayServiceImpl implements AlipayService {

//	private Logger log = LoggerFactory.getLogger(AlipayServiceImpl.class);

	@Override
	public Message pay(PayParam param) {

		//------------------------请求参数--------------------------
		//支付类型
		String payment_type = "1";
		//必填，不能修改
		//服务器异步通知页面路径
		String notify_url = "http://localhost:8080/create_direct_pay_by_user-JAVA-UTF-8/notify_url.jsp";
		//需http://格式的完整路径，不能加?id=123这类自定义参数

		//页面跳转同步通知页面路径
		String return_url = "http://localhost:8080/create_direct_pay_by_user-JAVA-UTF-8/return_url.jsp";
		//需http://格式的完整路径，不能加?id=123这类自定义参数，不能写成http://localhost/

		//商户订单号
		String out_trade_no = param.getOrderNo();
		//商户网站订单系统中唯一订单号，必填

		//订单(产品)名称
		String subject = param.getProductName();
		//必填

		//付款金额
		String total_fee = param.getOrderAmount();
		//必填

		//订单(产品)描述
		String body = param.getProductRemark();
				
		//商品展示地址
		String show_url = "";
		//需以http://开头的完整路径，例如：http://www.商户网址.com/myorder.html

		//防钓鱼时间戳
		String anti_phishing_key = "";
		//若要使用请调用类文件submit中的query_timestamp函数

		//客户端的IP地址
		String exter_invoke_ip = "";
		//非局域网的外网IP地址，如：221.0.0.1	
		
		//------------------------------------------------------------------------------------
		
		//把请求参数打包成数组
		Map<String, String> sParaTemp = new HashMap<String, String>();
		sParaTemp.put("service", "create_direct_pay_by_user");//服务名
		sParaTemp.put("partner", AlipayConfig.partner);//合作者身份ID
		sParaTemp.put("seller_email", AlipayConfig.seller_email);//协定的收款账号
		sParaTemp.put("_input_charset", AlipayConfig.input_charset);//字符编码
		sParaTemp.put("payment_type", payment_type);//支付类型
		sParaTemp.put("notify_url", notify_url);//服务器异步通知页面
		sParaTemp.put("return_url", return_url);//页面跳转同步通知页面路径
		sParaTemp.put("out_trade_no", out_trade_no);//商户订单号
		sParaTemp.put("subject", subject);//订单名称
		sParaTemp.put("total_fee", total_fee);//订单总额
		sParaTemp.put("body", body);//订单描述
		sParaTemp.put("show_url", show_url);//商品展示页面(预计此处展示整订购的票面信息)
		sParaTemp.put("anti_phishing_key", anti_phishing_key);//防钓鱼时间戳
		sParaTemp.put("exter_invoke_ip", exter_invoke_ip);//客户端的IP地址
		
		//发送请求与解析响应
		try {
			String responseXml = AlipaySubmit.buildRequest("", "", sParaTemp);//发送请求并获取响应
			Map<String,String> result = new HashMap<String, String>();
			XMLUtil.parse(responseXml, result);//解析响应信息，存入Map
			if("T".equalsIgnoreCase(result.get("is_success"))){//判断是否成功
				return new Message(PayStatus.REQUEST_SUCCESS,result.get("trade_no"));
			}else{
				String errorCodes = result.get("error_code");//失败则获取错误码
				String errorCode=errorCodes.split("|")[0];//若不止一个错误，暂时只取第一个
				return new Message(PayStatus.FAILD,Constant.getAlipayErrMsg(errorCode));
			}
		} catch (HttpException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return null;
	}
	
	@Override
	public Message refund(RefundParam param) {
		return null;
	}
	
	@Override
	public String refundSignAlipay() {
		return null;
	}

}
